import { createRouter, createWebHashHistory  } from 'vue-router'
// import Layout from '../components/Layout/Layout.vue'
import store from '../store'
import { generatorRoutes } from '../api/generatorRoutes'
const routes = [
  {
    path: "/login",
    name: "login",
    meta: {
      title: "登录"
    },
    component: () => import("@/views/Login.vue")
  },
  {
    path: "/",
    name: "admin",
    meta: {
      title: "background management system",
      icon: "House"
    },
    redirect: "/homepage",
    component: () => import("@/views/layout/Admin.vue"),
  },
  {
    // 首页
    path: "/homepage",
    name: "homepage",
    component: () => import("@/views/layout/Admin.vue"),
    // component:()=>import("@/views/homepage/homepage.vue"),
    meta: {
      title: "homepage",
      icon: "House"
    },
    redirect: "/homepage/indexhomepage",
    children: [{
      path: "indexhomepage",
      name: "indexhomepage",
      component: () => import("@/views/homepage/homepage.vue"),
      // meta:{
      //     title:"首页"
      // },
    }]
  },
  // {
  //   // 用户管理
  //   path: "/user",
  //   name: "user",
  //   component: () => import("@/views/layout/Admin.vue"),
  //   // component:()=>import("@/views/homepage/homepage.vue"),
  //   meta: {
  //     title: "用户管理",
  //     icon:"user"
  //   },
  //   redirect: "/user/administrator",
  //   children: [{
  //     path: "administrator",
  //     name: "administrator",
  //     component: () => import("@/views/user/administrator.vue"),
  //     meta: {
  //       title: "管理员",
  //       icon:"UserFilled"
  //     },
  //   }, {
  //     path: "supplier",
  //     name: "supplier",
  //     component: () => import("@/views/user/supplier.vue"),
  //     meta: {
  //       title: "供应商",
  //       icon:"Avatar"
  //     },
  //   }, {
  //     path: "enduser",
  //     name: "enduser",
  //     component: () => import("@/views/user/enduser.vue"),
  //     meta: {
  //       title: "终端用户",
  //       icon:"CircleCheck"
  //     },
  //   }]
  // }, {
  //     path: "enduser",
  //     name: "enduser",
  //     component: () => import("@/views/user/enduser.vue"),
  //     meta: {
  //       title: "终端用户",
  //       icon:"CircleCheck"
  //     },
  //   }]
  // },{
  //     path: "enduser",
  //     name: "enduser",
  //     component: () => import("@/views/user/enduser.vue"),
  //     meta: {
  //       title: "终端用户",
  //       icon:"CircleCheck"
  //     },
  //   }]
  // }
  //  {
  //   // 系统管理
  //   path: "/system",
  //   name: "system",
  //   component: () => import("@/views/layout/Admin.vue"),
  //   // component:()=>import("@/views/homepage/homepage.vue"),
  //   meta: {
  //     title: "系统管理",
  //     icon:"Setting"
  //   },
  //   redirect: "/system/menu",
  //   children: [{
  //     path: "menu",
  //     name: "menu",
  //     component: () => import("@/views/system/menu.vue"),
  //     meta: {
  //       title: "菜单管理",
  //       icon:"Document"
  //     },
  //   }, {
  //     path: "role",
  //     name: "role",
  //     component: () => import("@/views/system/role.vue"),
  //     meta: {
  //       title: "角色管理",
  //       icon:"Notification"
  //     },
  //   }, {
  //     path: "systemview",
  //     name: "systemview",
  //     component: () => import("@/views/system/systemview.vue"),
  //     meta: {
  //       title: "系统设置",
  //       icon:"Setting"
  //     },
  //   }]
  // }, 
  // {
  //   // 设备管理
  //   path: "/device",
  //   name: "device",
  //   component: () => import("@/views/layout/Admin.vue"),
  //   // component:()=>import("@/views/homepage/homepage.vue"),
  //   meta: {
  //     title: "设备管理",
  //     icon:"PriceTag"
  //   },
  //   redirect: "/device/inventorydevice",
  //   children: [{
  //     path: "inventorydevice",
  //     name: "inventorydevice",
  //     component: () => import("@/views/device/inventorydevice.vue"),
  //     meta: {
  //       title: "库存设备",
  //       icon:"SetUp"
  //     },
  //   }, {
  //     path: "userdevice",
  //     name: "userdevice",
  //     component: () => import("@/views/device/userdevice.vue"),
  //     meta: {
  //       title: "用户设备",
  //       icon:"DataAnalysis"
  //     },
  //   }]
  // },
  // {
  //   // 报表管理
  //   path: "/journaling",
  //   name: "journaling",
  //   component: () => import("@/views/layout/Admin.vue"),
  //   // component:()=>import("@/views/homepage/homepage.vue"),
  //   meta: {
  //     title: "报表管理",
  //     icon:"Reading"
  //   },
  //   redirect: "/journaling/indexjournaling",
  //   children: [{
  //     path: "indexjournaling",
  //     name: "indexjournaling",
  //     component: () => import("@/views/journaling/journaling.vue"),
  //     // meta: {
  //     //   title: "报表管理"
  //     // },
  //   }]
  // },
  // {
  //   // 日志管理
  //   path: "/logsview",
  //   name: "logsview",
  //   component: () => import("@/views/layout/Admin.vue"),
  //   meta: {
  //     title: "日志管理",
  //     icon:"FolderOpened"
  //   },
  //   redirect: "/logsview/operatelog",
  //   children: [{
  //     path: "operatelog",
  //     name: "operatelog",
  //     component: () => import("@/views/logsview/operatelog.vue"),
  //     meta: {
  //       title: "操作日志",
  //       icon:"DocumentChecked"
  //     },
  //   }, {
  //     path: "loginlog",
  //     name: "loginlog",
  //     component: () => import("@/views/logsview/loginlog.vue"),
  //     meta: {
  //       title: "登录日志",
  //       icon:'ScaleToOriginal'
  //     },
  //   },{
  //     path: "feedbackrecord",
  //     name: "feedbackrecord",
  //     component: () => import("@/views/logsview/feedbackrecord.vue"),
  //     meta: {
  //       title: "反馈记录",
  //       icon:"DocumentDelete"
  //     },
  //   }]
  // },
  {
    // 个人中心
    path: "/personalcenter",
    name: "personalcenter",
    component: () => import("@/views/layout/Admin.vue"),
    // component:()=>import("@/views/homepage/homepage.vue"),
    meta: {
      title: "Personal Center",
      icon: "user"
    },
    redirect: "/personalcenter/indexperson",
    children: [{
      path: "indexperson",
      name: "indexperson",
      component: () => import("@/views/personalcenter/personalcenter.vue"),
    }]
  },
  {
    // 个人中心
    path: "/allocation",
    name: "allocation",
    component: () => import("@/views/layout/Admin.vue"),
    // component:()=>import("@/views/homepage/homepage.vue"),
    meta: {
      title: "Assigning Users",
      icon: "user"
    },
    redirect: "/allocation/indexallocation",
    children: [{
      path: "indexallocation/:type",
      name: "indexallocation/:type",
      component: () => import("@/views/allocation/allocation.vue"),
    }]
  },
  {
    path: "/nop",
    name: "nop",
    component: () => import("../views/notpermission.vue")
  },
  {
    path: '/404',
    name: '404',
    component: () => import('@/views/404.vue')
  },
  {
    path: '/:pathMatch(.*)*', // 通配符 404
    redirect: '/404' // 显式跳转到 /404，避免循环
  }
]
// routes = 12 login > menu > edit routes > new routes , 
const router = createRouter({
  history: createWebHashHistory (import.meta.env.VITE_BASE_URL),
  routes
})

// 路由守卫示例
// router.beforeEach((to, from, next) => {
//   const isAuthenticated = localStorage.getItem('token')
//   if (to.name !== 'Login' && !isAuthenticated) {
//     next({ name: 'Login' })
//   } else {
//     next()
//   }
// })
// router.beforeEach((to, from, next) => {
//   const authToken = getAuthToken(); // 从Cookie或localStorage读取Token

//   if (to.meta.requiresAuth) { // 如果目标页面需要登录权限
//     if (authToken) {
//       // 有Token，验证是否有效（可选，避免Token过期后仍能访问）
//       verifyToken(authToken).then(isValid => {
//         if (isValid) {
//           next(); // Token有效，放行
//         } else {
//           next("/login"); // Token无效，跳转登录页
//         }
//       });
//     } else {
//       next("/login"); // 无Token，跳转登录页
//     }
//   } else {
//     next( ); // 不需要登录的页面，直接放行
//   }
// });

// router.beforeEach((to, from) => {
//   let token = localStorage.getItem("token")
//   if (!token && to.fullPath !== "/login") {
//     return {
//       path: "/login"
//     }
//   }
//   if (token) {
//     // / 在App.vue或路由守卫
//     // if (store.state.isInitialLoad) {
//     //   store.commit('setInitialLoad', false)
//     // } else {
//     //   console.log('刷新行为发生')
//     //   // console.log('刷新');
//     //   //   let routesData = JSON.parse(localStorage.getItem("routesData"));
//     //   //   // // 使用commit调用mutations下面的方法
//     //   //   store.commit("addRoutersData",JSON.parse(localStorage.getItem("routesData")));
//     //   //   generatorRoutes(JSON.parse(localStorage.getItem("routesData")));
//     //     // // 重定向将要进入的路由
//     //     // // 如果不加下面的代码，会在路由没有准备好就跳转，出现404
//     //     // // 如果加，相当于延迟跳转，此时路由已经准备好
//     //     // return {
//     //     //     path:to.fullPath

//     //     // };
//     // }
//     // token存在有两种情况
//     // 一种是没刷新时，此时动态路由已经创建，可以正常使用
//     // 一种是刷新后，此时动态路由已经销毁，不能进行路由跳转，需要重新加载
//     // let routesData = store.state.routesData;
//     // if (routesData.length === 0) {
//     //     console.log('刷新');
//     //     let routesData = JSON.parse(localStorage.getItem("routesData"));
//     //     // 使用commit调用mutations下面的方法
//     //     store.commit("addRoutersData",routesData);
//     //     generatorRoutes(routesData);
//     //     // 重定向将要进入的路由
//     //     // 如果不加下面的代码，会在路由没有准备好就跳转，出现404
//     //     // 如果加，相当于延迟跳转，此时路由已经准备好
//     //     return {
//     //         path:to.fullPath
//     //     };
//     // }
//     console.log(store.state.permission.routesData);

//     // 已登录，检查是否有动态路由
//     // const hasDynamicRoutes = store.state.permission.routesData.length > 0
//     // if (hasDynamicRoutes) {
//     //   // 若有动态路由，直接放行（但需确保已添加到路由实例）
//     //   // next()
//     //   router.push("/")
//     // } else {
//     //   // 从Vuex获取动态路由表（若已持久化，此时已恢复）
//     //   const dynamicRoutes = store.state.permission.routesData
//     //   // 重新添加动态路由
//     //   dynamicRoutes.forEach(route => {
//     //     router.addRoute(route)
//     //   })
//     //   // 重定向到目标路由（避免刷新后路由未生效）
//     //   next({ ...to, replace: true })
//     // }
//   } else {
//     // 未登录，跳登录页
//     if (to.path === '/login') {
//       // next()
//     } else {
//       next('/login')
//     }
//   }


// })

//路由拦截
router.beforeEach(async (to, from, next) => {

    const token = localStorage.getItem("token");
  
    // 1. 如果没有 token，且不是去登录页，则跳转到登录页
    if (!token && to.path !== "/login") {
        next("/login");
        return;
    }

    // 2. 如果有 token
    if (token) {
        const routesData = store.state.routesData;
      // console.log(routesData,"11111");
      
        // 如果 routesData 为空（刷新后需要重新加载）
        // if (!routesData || routesData.length  == 0) {
        //     console.log("刷新页面，重新加载动态路由");
           
        //     // 从 localStorage 恢复 routesData
        //     // const storedRoutesData = JSON.parse(localStorage.getItem("routesData"));
        //     // if (storedRoutesData && storedRoutesData.length > 0) {
        //     //     store.commit("addRoutersData", storedRoutesData); // 更新 Vuex 状态
        //     //     await generatorRoutes(storedRoutesData); // 动态添加路由
        //     // }

        //     // **关键点：重新尝试当前导航（避免死循环）**
        //     // next("/nop");
        //     // 使用 `next({ ...to, replace: true })` 确保路由加载完成后再跳转
        //     next({ ...to, replace: true });
        //     return;
        // } else {
        //     // 如果 routesData 已经存在，直接放行
            next();
        // }
    } else {
        // 理论上不会走到这里，因为前面已经拦截了未登录的情况
        next();
    }
});
// router.beforeEach((to, from) => {
//   let token = localStorage.getItem('token');
//   // 如果token不存在，并且要跳转的不是login页，则重定向到login
//   if (!token && to.fullPath !== '/login') {
//     return {
//       path: '/login'
//     }
//   }

//   if (token) {
//     // token存在有两种情况
//     // 一种是没刷新时，此时动态路由已经创建，可以正常使用
//     // 一种是刷新后，此时动态路由已经销毁，不能进行路由跳转，需要重新加载

//     let routesData = store.state.routesData;

//     if (routesData && routesData.length === 0) {
//       console.log(from);
//       console.log('刷新');
//       routesData = JSON.parse(localStorage.getItem("routesData"));
//       // 使用commit调用mutations下面的方法
//       store.commit("addRoutersData", routesData);
//       generatorRoutes(routesData);
//       // 重定向将要进入的路由
//       // 如果不加下面的代码，会在路由没有准备好就跳转，出现404
//       // 如果加，相当于延迟跳转，此时路由已经准备好
//       return {
//         // path: to.fullPath
//         path: "/"
//       };

//     } else {
//       return {
//         path: "/404"
//       }

//     }
//   }

// })

export function getAuthToken() {
  // 优先从Cookie读取（如果之前存的是Cookie）
  const cookieToken = document.cookie.replace(/(?:(?:^|.*;\s*)authToken\s*=\s*([^;]*).*$)|^.*$/, "$1");
  if (cookieToken) return cookieToken;

  // 如果Cookie没有，再从localStorage读取
  return localStorage.getItem("authToken");
}

// 验证Token是否有效的函数
function verifyToken(token) {
  return axios.get("/api/verify-token", {
    headers: { "Authorization": `Bearer ${token}` }
  }).then(response => response.data.isValid);
}

export default router